/**
 * 全局 to 工具类
 * 用于解耦 API 请求的错误处理和数据获取
 *
 * @param promiseOrUseFetchResult - 需要处理的 Promise 或 useFetch 结果
 * @returns [error, data] - 错误和数据的元组
 */
export async function to<T, U = any>(
  promiseOrUseFetchResult: any
): Promise<[U, undefined] | [null, T]> {
  try {
    const result = await promiseOrUseFetchResult;

    // 处理 useFetch 结果
    if (result?.data && result?.error) {
      if (result.error.value) {
        return [result.error.value.data || result.error.value, undefined];
      }
      return processData(result.data.value);
    }

    // 处理普通 Promise 结果
    return processData(result);
  } catch (error: any) {
    return [error.data || error, undefined];
  }
}

/**
 * 统一数据处理逻辑
 */
function processData<T, U = any>(data: any): [U, undefined] | [null, T] {
  if (!data || typeof data !== 'object') return [null, data];

  // HTTP 状态错误
  if (data.code !== undefined && data.code !== 200) {
    return [data, undefined];
  }

  // 业务逻辑处理
  if (data.code === 200 && data.data) {
    return data.data.code === 1
      ? [null, data.data.data]
      : [data.data, undefined];
  }

  // 兜底处理
  return [null, data.data || data];
}

export default to;
